//@author wtfumlomglol
package amm.Graphic;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.HashMap;


//a rajzolás és képbetöltésért felelős osztály
public class Display extends Canvas {

    //alaptérkép szövegként
    private ArrayList<String> initMap = new ArrayList<String>();
    //aktuális térkép szövegként
    private ArrayList<String> currentMap = new ArrayList<String>();
    //asszociatív tömb a képek tárolására
    private HashMap<String, Image> images = new HashMap<String, Image>();
    //default esemény
    private String event = "";
    //idő kiírásáshoz
    private String time = "";
    //titok
    private boolean secret = false;
    //default megjelenítési mód
    private DisplayMode mode = DisplayMode.MENUEMPTY;
    //várostérkép
    private BufferedImage citymap;
    //dupla buffereléshez kép
    private BufferedImage backupImage;
    //esemény látható
    private boolean eventVisible = false;
    //nyertes idő látható
    private boolean wonTime = false;

    // konstruktorban töltjük be a képeket
    public Display() {
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        //a képek teljes betöltéséért felelős
        MediaTracker mt = new MediaTracker(this);
        int id = 0;

        //közepes sebességű autó képének betöltése, ami jobbra néz
        Image VWWImage = toolkit.getImage(getClass().getResource("images/vw_w.png"));
        mt.addImage(VWWImage, id);
        id++;
        images.put("VW", VWWImage);

        //közepes sebességű autó képének betöltése, ami balra néz
        Image VWEImage = toolkit.getImage(getClass().getResource("images/vw_e.png"));
        mt.addImage(VWEImage, id);
        id++;
        images.put("VE", VWEImage);

        //közepes sebességű autó képének betöltése, ami lefele néz
        Image VWSImage = toolkit.getImage(getClass().getResource("images/vw_s.png"));
        mt.addImage(VWSImage, id);
        id++;
        images.put("VS", VWSImage);

        //közepes sebességű autó képének betöltése, ami felfele néz
        Image VWNImage = toolkit.getImage(getClass().getResource("images/vw_n.png"));
        mt.addImage(VWNImage, id);
        id++;
        images.put("VN", VWNImage);

        //gyors sebességű autó képének betöltése, ami jobbra néz
        Image FerrariWImage = toolkit.getImage(getClass().getResource("images/ferrari_w.png"));
        mt.addImage(FerrariWImage, id);
        id++;
        images.put("LW", FerrariWImage);

        //gyors sebességű autó képének betöltése, ami balra néz
        Image FerrariEImage = toolkit.getImage(getClass().getResource("images/ferrari_e.png"));
        mt.addImage(FerrariEImage, id);
        id++;
        images.put("LE", FerrariEImage);

        //gyors sebességű autó képének betöltése, ami lefele néz
        Image FerrariSImage = toolkit.getImage(getClass().getResource("images/ferrari_s.png"));
        mt.addImage(FerrariSImage, id);
        id++;
        images.put("LS", FerrariSImage);

        //gyors sebességű autó képének betöltése, ami felfele néz
        Image FerrariNImage = toolkit.getImage(getClass().getResource("images/ferrari_n.png"));
        mt.addImage(FerrariNImage, id);
        id++;
        images.put("LN", FerrariNImage);

        //lassú sebességű autó képének betöltése, ami jobbra néz
        Image TrabantWImage = toolkit.getImage(getClass().getResource("images/trabant_w.png"));
        mt.addImage(TrabantWImage, id);
        id++;
        images.put("TW", TrabantWImage);

        //lassú sebességű autó képének betöltése, ami lefele néz
        Image TrabantSImage = toolkit.getImage(getClass().getResource("images/trabant_s.png"));
        mt.addImage(TrabantSImage, id);
        id++;
        images.put("TS", TrabantSImage);

        //lassú sebességű autó képének betöltése, ami felfele néz
        Image TrabantNImage = toolkit.getImage(getClass().getResource("images/trabant_n.png"));
        mt.addImage(TrabantNImage, id);
        id++;
        images.put("TN", TrabantNImage);

        //lassú sebességű autó képének betöltése, ami balra néz
        Image TrabantEImage = toolkit.getImage(getClass().getResource("images/trabant_e.png"));
        mt.addImage(TrabantEImage, id);
        id++;
        images.put("TE", TrabantEImage);

        //rendőr autó képének betöltése, ami jobbra néz
        Image PoliceWImage = toolkit.getImage(getClass().getResource("images/police_w.png"));
        mt.addImage(PoliceWImage, id);
        id++;
        images.put("PW", PoliceWImage);

        //lassú sebességű autó képének betöltése, ami balra néz
        Image PoliceEImage = toolkit.getImage(getClass().getResource("images/police_e.png"));
        mt.addImage(PoliceEImage, id);
        id++;
        images.put("PE", PoliceEImage);

        //lassú sebességű autó képének betöltése, ami lefele néz
        Image PoliceSImage = toolkit.getImage(getClass().getResource("images/police_s.png"));
        mt.addImage(PoliceSImage, id);
        id++;
        images.put("PS", PoliceSImage);

        //lassú sebességű autó képének betöltése, ami felfele néz
        Image PoliceNImage = toolkit.getImage(getClass().getResource("images/police_n.png"));
        mt.addImage(PoliceNImage, id);
        id++;
        images.put("PN", PoliceNImage);

        //rabló autó képének betöltése, ami jobbra néz
        Image CriminalWImage = toolkit.getImage(getClass().getResource("images/robber_w.png"));
        mt.addImage(CriminalWImage, id);
        id++;
        images.put("CW", CriminalWImage);

         //rabló autó képének betöltése, ami felfele néz
        Image CriminalNImage = toolkit.getImage(getClass().getResource("images/robber_n.png"));
        mt.addImage(CriminalNImage, id);
        id++;
        images.put("CN", CriminalNImage);

         //rabló autó képének betöltése, ami balra néz
        Image CriminalEImage = toolkit.getImage(getClass().getResource("images/robber_e.png"));
        mt.addImage(CriminalEImage, id);
        id++;
        images.put("CE", CriminalEImage);

         //rabló autó képének betöltése, ami lefele néz
        Image CriminalSImage = toolkit.getImage(getClass().getResource("images/robber_s.png"));
        mt.addImage(CriminalSImage, id);
        id++;
        images.put("CS", CriminalSImage);

         //rabló autó ,amikor elüttötte a nyulat kép betöltése, ami jobbra néz
        Image BloodyWImage = toolkit.getImage(getClass().getResource("images/robber_with_bunny_w.png"));
        mt.addImage(BloodyWImage, id);
        id++;
        images.put("yW", BloodyWImage);

        //rabló autó ,amikor elüttötte a nyulat kép betöltése, ami balra néz
        Image BloodyEImage = toolkit.getImage(getClass().getResource("images/robber_with_bunny_e.png"));
        mt.addImage(BloodyEImage, id);
        id++;
        images.put("yE", BloodyEImage);

        //rabló autó ,amikor elüttötte a nyulat kép betöltése, ami lefele néz
        Image BloodySImage = toolkit.getImage(getClass().getResource("images/robber_with_bunny_s.png"));
        mt.addImage(BloodySImage, id);
        id++;
        images.put("yS", BloodySImage);

        //rabló autó ,amikor elüttötte a nyulat kép betöltése, ami felfele néz
        Image BloodyNImage = toolkit.getImage(getClass().getResource("images/robber_with_bunny_n.png"));
        mt.addImage(BloodyNImage, id);
        id++;
        images.put("yN", BloodyNImage);

        //nyúl képének betöltése
        Image BunnyImage = toolkit.getImage(getClass().getResource("images/bunny.png"));
        mt.addImage(BunnyImage, id);
        id++;
        images.put("Y", BunnyImage);

        //bank képének betöltése
        Image BankImage = toolkit.getImage(getClass().getResource("images/notroad_bank.png"));
        mt.addImage(BankImage, id);
        id++;
        images.put("$", BankImage);

        //rendőrség képének betöltése
        Image PDImage = toolkit.getImage(getClass().getResource("images/notroad_police.png"));
        mt.addImage(PDImage, id);
        id++;
        images.put("D", PDImage);

        //rejtekhely képének betöltése
        Image HideoutImage = toolkit.getImage(getClass().getResource("images/notroad_hideout.png"));
        mt.addImage(HideoutImage, id);
        id++;
        images.put("H", HideoutImage);

        //üres mező képének betöltése
        Image EmptyImage = toolkit.getImage(getClass().getResource("images/notroad_empty.png"));
        mt.addImage(EmptyImage, id);
        id++;
        images.put("0", EmptyImage);

        //ház(csak úgy) képének betöltése
        Image HouseImage = toolkit.getImage(getClass().getResource("images/notroad_house.png"));
        mt.addImage(HouseImage, id);
        id++;
        images.put("1", HouseImage);

        //felhő karcoló(csakúgy, bár nem is hasonlít rá) képének betöltése
        Image SkyScraperImage = toolkit.getImage(getClass().getResource("images/notroad_skyscraper.png"));
        mt.addImage(SkyScraperImage, id);
        id++;
        images.put("2", SkyScraperImage);

        //vízszintes út képének betöltése
        Image RHImage = toolkit.getImage(getClass().getResource("images/roadhoriz.png"));
        mt.addImage(RHImage, id);
        id++;
        images.put(">", RHImage);
        images.put("<", RHImage);

        // függőleges út képének betöltése
        Image RVImage = toolkit.getImage(getClass().getResource("images/roadvert.png"));
        mt.addImage(RVImage, id);
        id++;
        images.put("v", RVImage);
        images.put("^", RVImage);

        //stop  táblás út képének betöltése, ami felfele néz
        Image StopNImage = toolkit.getImage(getClass().getResource("images/road_stop_vert_n.png"));
        mt.addImage(StopNImage, id);
        id++;
        images.put("sN", StopNImage);

        //stop  táblás út képének betöltése, ami balra néz
        Image StopEImage = toolkit.getImage(getClass().getResource("images/road_stop_horiz_e.png"));
        mt.addImage(StopEImage, id);
        id++;
        images.put("sE", StopEImage);

        //stop  táblás út képének betöltése, ami lefele néz
        Image StopSImage = toolkit.getImage(getClass().getResource("images/road_stop_vert_s.png"));
        mt.addImage(StopSImage, id);
        id++;
        images.put("sS", StopSImage);

        //stop  táblás út képének betöltése, ami jobbra néz
        Image StopWImage = toolkit.getImage(getClass().getResource("images/road_stop_horiz_w.png"));
        mt.addImage(StopWImage, id);
        id++;
        images.put("sW", StopWImage);

        //lámpás kerszteződés út képének betöltése, ahol a lámpa balra néz
        Image XREImage = toolkit.getImage(getClass().getResource("images/xroad_e.png"));
        mt.addImage(XREImage, id);
        id++;
        images.put("E", XREImage);

        //lámpás kerszteződés út képének betöltése, ahol a lámpa jobbra néz
        Image XRWImage = toolkit.getImage(getClass().getResource("images/xroad_w.png"));
        mt.addImage(XRWImage, id);
        id++;
        images.put("W", XRWImage);

        //lámpás kerszteződés út képének betöltése, ahol a lámpa délre néz
        Image XRSImage = toolkit.getImage(getClass().getResource("images/xroad_s.png"));
        mt.addImage(XRSImage, id);
        id++;
        images.put("S", XRSImage);

        //lámpás kerszteződés út képének betöltése, ahol a lámpa északra néz
        Image XRNImage = toolkit.getImage(getClass().getResource("images/xroad_n.png"));
        mt.addImage(XRNImage, id);
        id++;
        images.put("N", XRNImage);

        //3utas kereszteződés képének betöltése, ahol felfele van plusz út
        Image X3NImage = toolkit.getImage(getClass().getResource("images/xroad_3_n.png"));
        mt.addImage(X3NImage, id);
        id++;
        images.put("3N", X3NImage);

        //3utas kereszteződés képének betöltése, ahol balra van plusz út
        Image X3WImage = toolkit.getImage(getClass().getResource("images/xroad_3_w.png"));
        mt.addImage(X3WImage, id);
        id++;
        images.put("3W", X3WImage);

        //3utas kereszteződés képének betöltése, ahol lefele van plusz út
        Image X3SImage = toolkit.getImage(getClass().getResource("images/xroad_3_s.png"));
        mt.addImage(X3SImage, id);
        id++;
        images.put("3S", X3SImage);

        //3utas kereszteződés képének betöltése, ahol jobbra van plusz út
        Image X3EImage = toolkit.getImage(getClass().getResource("images/xroad_3_e.png"));
        mt.addImage(X3EImage, id);
        id++;
        images.put("3E", X3EImage);

        //kanyar út képének betöltése, ahol fentről jobbra kanyarodik
        Image RNEImage = toolkit.getImage(getClass().getResource("images/road_turn_ne.png"));
        mt.addImage(RNEImage, id);
        id++;
        images.put("RNE", RNEImage);

        //kanyar út képének betöltése, ahol fentről balra kanyarodik
        Image RNWImage = toolkit.getImage(getClass().getResource("images/road_turn_nw.png"));
        mt.addImage(RNWImage, id);
        id++;
        images.put("RNW", RNWImage);

        //kanyar út képének betöltése, ahol lentről jobbra kanyarodik
        Image RSEImage = toolkit.getImage(getClass().getResource("images/road_turn_se.png"));
        mt.addImage(RSEImage, id);
        id++;
        images.put("RSE", RSEImage);

        //kanyar út képének betöltése, ahol lentről balra kanyarodik
        Image RSWImage = toolkit.getImage(getClass().getResource("images/road_turn_sw.png"));
        mt.addImage(RSWImage, id);
        id++;
        images.put("RSW", RSWImage);

        // menu képének betöltése
        Image MenuImage = toolkit.getImage(getClass().getResource("images/menu_800_600.jpg"));
        mt.addImage(MenuImage, id);
        id++;
        images.put("menu", MenuImage);

        // menu, amikor infót közlünk rajta
        Image MenuInfoImage = toolkit.getImage(getClass().getResource("images/menu_info_800_600.jpg"));
        mt.addImage(MenuInfoImage, id);
        id++;
        images.put("info", MenuInfoImage);

        // játék oldalsó paneljének betöltése
        Image SidebarImage = toolkit.getImage(getClass().getResource("images/sidebar.jpg"));
        mt.addImage(SidebarImage, id);
        id++;
        images.put("sidebar", SidebarImage);

        // titkos kép
        Image SecretImage = toolkit.getImage(getClass().getResource("images/secret.jpg"));
        mt.addImage(SecretImage, id);
        id++;
        images.put("secrettool", SecretImage);

        try {
            for (int i = 0; i < id; i++) {
                //ha a képet még nem sikerült egészében betölteni
                mt.waitForID(i);
            }
        } catch (InterruptedException ie) {
        }
        //ha hiba történt
        if (mt.isErrorID(0)) {
            Frame f = new Frame();
            f.setVisible(true);
            return;
        }
    }

    //kirajzolás
    @Override
    public void paint(Graphics g) {
        backupImage = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB);
        Graphics bg = backupImage.getGraphics();

        // milyen módban rajzoljuk ki
        switch (mode) {
            // menü info nélkül
            case MENUEMPTY: {
                bg.drawImage(images.get("menu"), 0, 0, null);
                break;
            }

            //szerzők megjelenítése
            case MENUCREDITS: {
                bg.drawImage(images.get("info"), 0, 0, null);
                bg.setColor(Color.BLACK);
                bg.setFont(new Font("Arial", Font.BOLD, 20));
                bg.drawString("Magyar meló", 570, 220);
                bg.setFont(new Font("Arial", Font.PLAIN, 15));
                bg.drawString("Készítő: WTFUMLOMGLOL csapat", 520, 250);
                bg.setFont(new Font("Arial", Font.BOLD, 15));
                bg.drawString("Csapatvezető, dokumentáció, modell", 490, 280);
                bg.setFont(new Font("Arial", Font.PLAIN, 15));
                bg.drawString("Németh Kristóf", 520, 310);
                bg.setFont(new Font("Arial", Font.BOLD, 15));
                bg.drawString("Diagramok, dokumentáció, tesztelés", 490, 340);
                bg.setFont(new Font("Arial", Font.PLAIN, 15));
                bg.drawString("Nguyen Mai Dong", 520, 370);
                bg.setFont(new Font("Arial", Font.BOLD, 15));
                bg.drawString("Kódolás, tesztelés, grafikus tervezés", 490, 400);
                bg.setFont(new Font("Arial", Font.PLAIN, 15));
                bg.drawString("Opitzer Gábor", 520, 430);
                bg.setFont(new Font("Arial", Font.BOLD, 15));
                bg.drawString("Kódolás, javítás, modell", 490, 460);
                bg.setFont(new Font("Arial", Font.PLAIN, 15));
                bg.drawString("Kőhalmi István", 520, 490);
                bg.setFont(new Font("Arial", Font.BOLD, 15));
                bg.drawString("Köszönjük a konzulensnek:", 490, 520);
                bg.setFont(new Font("Arial", Font.PLAIN, 15));
                bg.drawString("Sipos Róbertnek", 520, 550);
                if(secret) bg.drawImage(images.get("secrettool"), 234, 182, null);
                break;
            }

            // legjobb eredmények megjelenítése
            case MENUHIGHSCORES: {
                bg.setColor(Color.BLACK);
                bg.drawImage(images.get("info"), 0, 0, null);
                bg.setFont(new Font("Arial", Font.BOLD, 20));
                if(!wonTime) bg.drawString("Content locked", 540, 220);
                else{
                bg.drawString("Utolsó nyertes idő:", 540, 220);
                bg.drawString(time, 600, 250);
                }

                
                break;
            }

            //játék leírás, kezelés megjelenítése
            case MENUCONTROLS: {
                bg.drawImage(images.get("info"), 0, 0, null);
                bg.setColor(Color.BLACK);
                bg.setFont(new Font("Arial", Font.BOLD, 22));
                bg.drawString("A játékról:", 480, 220);
                bg.setFont(new Font("Arial", Font.PLAIN, 20));
                bg.drawString("Cél eljuttatni a", 480, 250);
                bg.drawString("bankrablót", 480, 280);
                bg.drawImage(images.get("CE"), 600, 250, null);
                bg.drawString("a bankból", 480, 340);
                bg.drawImage(images.get("$"), 600, 305, null);
                bg.drawString("a rejtekhelyre", 480, 410);
                bg.drawImage(images.get("H"), 600, 370, null);
                bg.drawString("ütközés nélkül.", 600, 450);
                bg.setFont(new Font("Arial", Font.BOLD , 22));
                bg.drawString("Irányítás:", 480, 470);
                bg.setFont(new Font("Arial", Font.PLAIN, 20));
                bg.drawString("Mozgatás: nyilak", 580, 500);
                bg.drawString("Megállás: S", 580, 530);
                bg.drawString("Kilépés: Esc", 580, 560);
                break;
            }

            // a térképen az objektumok megjelenítése
            case CITYMAP: {
                bg.drawImage(citymap, 0, 0, null);
                for (int i = 0; i < currentMap.size(); i++) {
                    String mapRow = currentMap.get(i);
                    for (int j = 0; j < mapRow.length(); j++) {
                        String sign = mapRow.substring(j, j + 1);
                        //stop tábla
                        if (sign.equals("s")) {
                            String mapSign = initMap.get(i).substring(j, j + 1);
                            if (mapSign.equals(">")) {
                                bg.drawImage(images.get("sE"), j * 60, i * 60, null); // kelet
                            } else if (mapSign.equals("<")) {
                                bg.drawImage(images.get("sW"), j * 60, i * 60, null); //nyugat
                            } else if (mapSign.equals("v")) {
                                bg.drawImage(images.get("sS"), j * 60, i * 60, null); // dél
                            } else {
                                bg.drawImage(images.get("sN"), j * 60, i * 60, null); // észak
                            }
                            //lassú jármű
                        } else if (sign.equals("T")) {
                            String mapSign = initMap.get(i).substring(j, j + 1);
                            if (mapSign.equals(">")) {
                                bg.drawImage(images.get("TE"), j * 60 + 5, i * 60 + 5, null); //kelet
                            } else if (mapSign.equals("<")) {
                                bg.drawImage(images.get("TW"), j * 60 + 5, i * 60 + 5, null); //nyugat
                            } else if (mapSign.equals("v")) {
                                bg.drawImage(images.get("TS"), j * 60 + 5, i * 60 + 5, null); // dél
                            } else if (mapSign.equals("^")) {
                                bg.drawImage(images.get("TN"), j * 60 + 5, i * 60 + 5, null); // észak
                            } else {
                                bg.drawImage(images.get("TE"), j * 60 + 5, i * 60 + 5, null); // default kelet
                            }
                            //gyors jármű
                        } else if (sign.equals("L")) {
                            String mapSign = initMap.get(i).substring(j, j + 1);
                            if (mapSign.equals(">")) {
                                bg.drawImage(images.get("LE"), j * 60 + 5, i * 60 + 5, null); //kelet
                            } else if (mapSign.equals("<")) {
                                bg.drawImage(images.get("LW"), j * 60 + 5, i * 60 + 5, null); //nyugat
                            } else if (mapSign.equals("v")) {
                                bg.drawImage(images.get("LS"), j * 60 + 5, i * 60 + 5, null); // dél
                            } else if (mapSign.equals("^")) {
                                bg.drawImage(images.get("LN"), j * 60 + 5, i * 60 + 5, null);//észak
                            } else {
                                bg.drawImage(images.get("LE"), j * 60 + 5, i * 60 + 5, null); //default kelet
                            }
                            //közepes jármű
                        } else if (sign.equals("V")) {
                            String mapSign = initMap.get(i).substring(j, j + 1);
                            if (mapSign.equals(">")) {
                                bg.drawImage(images.get("VE"), j * 60 + 5, i * 60 + 5, null);// kelet
                            } else if (mapSign.equals("<")) {
                                bg.drawImage(images.get("VW"), j * 60 + 5, i * 60 + 5, null);// nyugat
                            } else if (mapSign.equals("v")) {
                                bg.drawImage(images.get("VS"), j * 60 + 5, i * 60 + 5, null);// dél
                            } else if (mapSign.equals("^")) {
                                bg.drawImage(images.get("VN"), j * 60 + 5, i * 60 + 5, null);//észak
                            } else {
                                bg.drawImage(images.get("VE"), j * 60 + 5, i * 60 + 5, null); // default kelet
                            }
                            //bankrabló
                        } else if (sign.equals("C")) {
                            String mapSign = initMap.get(i).substring(j, j + 1);
                            if (mapSign.equals(">")) {
                                bg.drawImage(images.get("CE"), j * 60 + 5, i * 60 + 5, null); // kelet
                            } else if (mapSign.equals("<")) {
                                bg.drawImage(images.get("CW"), j * 60 + 5, i * 60 + 5, null);// nyugat
                            } else if (mapSign.equals("v")) {
                                bg.drawImage(images.get("CS"), j * 60 + 5, i * 60 + 5, null);// dél
                            } else if (mapSign.equals("^")) {
                                bg.drawImage(images.get("CN"), j * 60 + 5, i * 60 + 5, null);// észak
                            } else {
                                bg.drawImage(images.get("CE"), j * 60 + 5, i * 60 + 5, null);// default kelet
                            }
                            //rendőr
                        } else if (sign.equals("P")) {
                            String mapSign = initMap.get(i).substring(j, j + 1);
                            if (mapSign.equals(">")) {
                                bg.drawImage(images.get("PE"), j * 60 + 5, i * 60 + 5, null);//kelet
                            } else if (mapSign.equals("<")) {
                                bg.drawImage(images.get("PW"), j * 60 + 5, i * 60 + 5, null);//nyugat
                            } else if (mapSign.equals("v")) {
                                bg.drawImage(images.get("PS"), j * 60 + 5, i * 60 + 5, null);// dél
                            } else if (mapSign.equals("^")) {
                                bg.drawImage(images.get("PN"), j * 60 + 5, i * 60 + 5, null);//észak
                            } else {
                                bg.drawImage(images.get("PE"), j * 60 + 5, i * 60 + 5, null);//default kelet
                            }
                            //bankrabló elütött nyullal
                        } else if (sign.equals("y")) {
                            String mapSign = initMap.get(i).substring(j, j + 1);
                            if (mapSign.equals(">")) {
                                bg.drawImage(images.get("yE"), j * 60 + 5, i * 60 + 5, null);//kelet
                            } else if (mapSign.equals("<")) {
                                bg.drawImage(images.get("yW"), j * 60 + 5, i * 60 + 5, null);//nyugat
                            } else if (mapSign.equals("v")) {
                                bg.drawImage(images.get("yS"), j * 60 + 5, i * 60 + 5, null);//dél
                            } else if (mapSign.equals("^")) {
                                bg.drawImage(images.get("yN"), j * 60 + 5, i * 60 + 5, null);//észak
                            } else {
                                bg.drawImage(images.get("yE"), j * 60 + 5, i * 60 + 5, null);//default kelet
                            }
                            //Nyúl
                        } else if (sign.equals("Y")) {
                            bg.drawImage(images.get("Y"), j * 60, i * 60, null);
                            //lámpa nyugat felé zöld
                        } else if (sign.equals("W")) {
                            bg.drawImage(images.get("W"), j * 60, i * 60, null);
                            //lámpa dél felé zöld
                        } else if (sign.equals("S")) {
                            bg.drawImage(images.get("S"), j * 60, i * 60, null);
                            //lámpa kelet felé zöld
                        } else if (sign.equals("E")) {
                            bg.drawImage(images.get("E"), j * 60, i * 60, null);
                            // lámpa észak felé zöld
                        } else if (sign.equals("N")) {
                            bg.drawImage(images.get("N"), j * 60, i * 60, null);
                        }
                    }
                }
                //adott játék befejezés kiíratása(win,Busted,Wasted)
                if (eventVisible) {
                    bg.setColor(Color.BLACK);
                    bg.setFont(new Font("Courier New", Font.BOLD, 80));
                    bg.drawString(event, 45, 305);
                    bg.setColor(Color.ORANGE);
                    bg.setFont(new Font("Courier New", Font.BOLD, 80));
                    bg.drawString(event, 40, 300);
                }
                //idő kiírása
                bg.setColor(Color.WHITE);
                bg.setFont(new Font("Ariel", Font.BOLD, 20));
                 bg.drawString("Játék ideje: ", 620, 450);
                 bg.drawString(time, 640, 480);
                break;
            }

            default: {
                break;
            }
        }
        g.drawImage(backupImage, 0, 0, null);
    }

    //milyen módban rajzoljunk ki
    public DisplayMode getMode() {
        return mode;
    }

    //megadjuk a mode-ot
    public void setMode(DisplayMode dm) {
        mode = dm;
    }

    //adott esemény megadása
    public void setEvent(String msg) {
        if (msg == null) {
            eventVisible = false;
        } else {
            this.event = msg;

            eventVisible = true;
            display();
        }
    }

    //térkép fájl megadása
    public void setMap(ArrayList<String> map) {
        this.currentMap = map;
    }

    //térkép felrajzolása
    public void initMap(ArrayList<String> roadmap) {
        initMap = roadmap;
        citymap = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB);
        Graphics mg = citymap.getGraphics();
        int emptyCount = 5;
        int emptyPhase = 0;
        //térkép elemek
        for (int i = 0; i < roadmap.size(); i++) {
            String rowMap = roadmap.get(i);
            for (int j = 0; j < rowMap.length(); j++) {
                String sign = rowMap.substring(j, j + 1);
                //utak jobbra(külön vizsgálat, hogy nem kanyart kell-e rakni
                if (sign.equals(">")) {
                    if (i != 0 && roadmap.get(i - 1).substring(j, j + 1).equals("v")) {
                        mg.drawImage(images.get("RNE"), j * 60, i * 60, null);
                    } else if (i != roadmap.size() - 1 && roadmap.get(i + 1).substring(j, j + 1).equals("^")) {
                        mg.drawImage(images.get("RSE"), j * 60, i * 60, null);
                    } else {
                        mg.drawImage(images.get(">"), j * 60, i * 60, null);
                    }
                 //utak balra(külön vizsgálat, hogy nem kanyart kell-e rakni
                } else if (sign.equals("<")) {
                    if (i != 0 && roadmap.get(i - 1).substring(j, j + 1).equals("v")) {
                        mg.drawImage(images.get("RNW"), j * 60, i * 60, null);
                    } else if (i != roadmap.size() - 1 && roadmap.get(i + 1).substring(j, j + 1).equals("^")) {
                        mg.drawImage(images.get("RSW"), j * 60, i * 60, null);
                    } else {
                        mg.drawImage(images.get("<"), j * 60, i * 60, null);
                    }
                    //utak lefele(külön vizsgálat, hogy nem kanyart kell-e rakni
                } else if (sign.equals("v")) {
                    if (j != 0 && rowMap.substring(j - 1, j).equals(">")) {
                        mg.drawImage(images.get("RSW"), j * 60, i * 60, null);
                    } else if (j != rowMap.length() - 1 && rowMap.substring(j + 1, j + 2).equals("<")) {
                        mg.drawImage(images.get("RSE"), j * 60, i * 60, null);
                    } else {
                        mg.drawImage(images.get("v"), j * 60, i * 60, null);
                    }
                    //utak felfele(külön vizsgálat, hogy nem kanyart kell-e rakni
                } else if (sign.equals("^")) {
                    if (j != 0 && rowMap.substring(j - 1, j).equals(">")) {
                        mg.drawImage(images.get("RNW"), j * 60, i * 60, null);
                    } else if (j != rowMap.length() - 1 && rowMap.substring(j + 1, j + 2).equals("<")) {
                        mg.drawImage(images.get("RNE"), j * 60, i * 60, null);
                    } else {
                        mg.drawImage(images.get("^"), j * 60, i * 60, null);
                    }
                }
                //lámpás kereszteződés
                else if (sign.equals("S") || sign.equals("W") || sign.equals("N") || sign.equals("E")) {
                    mg.drawImage(images.get(sign), j * 60, i * 60, null);
                }
                //bank
                else if (sign.equals("$")) {
                    mg.drawImage(images.get("$"), j * 60, i * 60, null);
                }
                //rejtekhely
                else if (sign.equals("H")) {
                    mg.drawImage(images.get("H"), j * 60, i * 60, null);
                }
                //rendőrség
                else if (sign.equals("D")) {
                    mg.drawImage(images.get("D"), j * 60, i * 60, null);
               //keresztút elhelyezése
                } else if (sign.equals("+")) {
                    if (j == 0 || rowMap.substring(j - 1, j).equals(" ")) {
                        mg.drawImage(images.get("3E"), j * 60, i * 60, null);
                    } else if (j == rowMap.length() - 1 || rowMap.substring(j + 1, j + 2).equals(" ")) {
                        mg.drawImage(images.get("3W"), j * 60, i * 60, null);
                    } else if (i == 0 || roadmap.get(i - 1).substring(j, j + 1).equals(" ")) {
                        mg.drawImage(images.get("3S"), j * 60, i * 60, null);
                    } else {
                        mg.drawImage(images.get("3N"), j * 60, i * 60, null);
                    }
                }
                //üres mező lehet üres, ház, vagy felhőkarcoló
                //5 mezőnként váltják egymást
                else {
                    if (emptyCount == 0) {
                        emptyPhase += 1;
                        emptyPhase %= 3;
                        emptyCount = 5;
                    }
                    mg.drawImage(images.get(Integer.toString(emptyPhase)), j * 60, i * 60, null);
                    emptyCount--;
                }
            }
        }
        // jobboldali mező megjelenítése
        mg.drawImage(images.get("sidebar"), 601, 0, null);
        mg.setFont(new Font("Arial", Font.PLAIN, 20));
        mg.setColor(Color.WHITE);
        mg.drawString("A játékról:", 660, 70);
        mg.drawString("Cél eljuttatni a", 620, 100);
        mg.drawString("bankrablót", 620, 130);
        mg.drawImage(images.get("CE"), 675, 140, null);
        mg.drawString("a rejtekhelyre", 620, 210);
        mg.drawImage(images.get("H"), 670, 220, null);
        mg.drawString("ütközés nélkül.", 620, 300);
        mg.drawString("Mozgás: nyilak", 620, 330);
        mg.drawString("Megállás: S", 620, 360);
        mg.drawString("Kilépés: Esc", 620, 390);
        mg.setFont(new Font("Arial", Font.BOLD, 22));
        currentMap = roadmap;
        display();
    }

    //megjelenítése
    public void display() {
        this.repaint();
    }

    //felülírás, vagyis update
    @Override
    public void update(Graphics g) {
        this.paint(g);
    }

    //idő megadása
    public void settime(String n)
    {
        time=n;
    }
    //nyert játék ideje
    public void setWonTime(boolean n)
    {
        wonTime=n;
    }
    //titkos info megjelenítése
    public void secret(){
        if(secret) secret=false;
        else secret = true;
    }
}
